<?php
//Класс для генерации RSS из массива данных
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Declaration                                                                                            //
// -----------                                                                                            //
// rss_generator($title)                                                                                  //
//   get($items)                                                                                          //
////////////////////////////////////////////////////////////////////////////////////////////////////////////

class View_Rss {

	private $_encoding = 'UTF-8';
	private $_title = '';
	private $_language = 'en-us';
	private $_description = '';
	private $_link = W_FULLPATH;
	private $_generator = 'Rss_Generator';
	private $_version = '2.0';
	private $_selfLink = '';

	public function __construct($title, $selfLink) {
		$this->_title=$title;
		$this->_selfLink=$selfLink;
	}

	function getHeader(){
		$rss='';
		// header
		$rss .='<?xml version="1.0" encoding = "'.$this->_encoding.'"?>';
		$rss .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" >';
		$rss .= '<channel>';
		$rss .= '<title>' . $this->_title . '</title>';
		$rss .= '<description>' . $this->_description . '</description>';
		$rss .= '<link>' . $this->_link . '</link>';
		$rss .= '<language>' . $this->_language . '</language>';
		$rss .= '<generator>' . $this->_generator . '</generator>';
		/*$rss .= '<image>
							<link>http://bitbybit.ru/</link>
							<url>' . W_IMAGES . 'background/bg_logo.gif</url>
							<title>BitByBit</title>
						 </image>';*/
		return $rss;
	}

	/**
	Создание rss статей
	@param:
	 $items - массив с массивами содержащими следующие параметры
		#	'name': - заголовок
		#	'text': - описание
		#	'creation': дата создания
		#	'post_type': типа поста
		#	'ID_post': id поста
		#	'login': логин автора
	**/
	public function getAllArticles($items, $notCloseFlag = false) {
		$rss = '';
		if (!$notCloseFlag)	$rss = $this->getHeader();
		//items
		foreach($items as $item) {
		  $rss .= '<item>';
			$rss .= '<title>' . ($notCloseFlag ? 'Статья »' : NULL);
				if ($item['essence_type'] == 11) $rss .= $item['folder_name'];
				elseif ($item['essence_type'] == 3) $rss .= 'Дневник ' . $item['login'];
				elseif ($item['essence_type'] == 14) $rss .= 'Блог разработчиков';
				$rss .= ' » ' . $item['name'] . '</title>';
		  $rss .= '<description><![CDATA[' . stripslashes($item['text']) . ']]></description>';
			$rss .= '<pubDate>' . date("r", strtotime($item['creation'])) . '</pubDate>';
			$link = W_FULLPATH . 'article/' . $item['ID_article'];
			$rss .= '<link>' . $link . '</link>';
		  $rss .= '<author>' . $item['login'] . '</author>';
			$rss .= '</item>';
		}
		//footer
		if (!$notCloseFlag){
			$rss .= '<atom:link href="' . $this->_selfLink . '" rel="self" type="application/rss+xml" />';
			$rss .= '</channel>';
			$rss .= '</rss>';
		}
		return $rss;
	}

	/**
	Создание rss уроков
	@param:
	 $items - массив с массивами содержащими следующие параметры
		#	'name': - заголовок
		#	'text': - описание
		#	'creation': дата создания
		#	'post_type': типа поста
		#	'login': логин автора
	**/
	public function getTutorial($items, $notCloseFlag = false) {
		$rss = '';
		if (!$notCloseFlag)
			$rss = $this->getHeader();

		//items
		foreach($items as $item) {
		  $rss .= '<item>';
			$rss .= '<title>' . ($notCloseFlag ? 'Урок »' : NULL) . $item['folder_name'] . ' »' . $item['tutorial'] . ' »' . $item['theme_name'] . ' »' . $item['name'] . '</title>';
		  $rss .= '<description><![CDATA[' . stripslashes($item['lesson']) . ']]></description>';
			$rss .= '<pubDate>' . date("r", strtotime($item['creation'])) . '</pubDate>';
			$link = W_FULLPATH . 'tutorial/' . $item['url_name'] . '/lesson/' . $item['ID_tutorial_lesson'];
			$rss .= '<link>' . $link . '</link>';
		  $rss .= '<author>' . $item['login'] . '</author>';
			$rss .= '</item>';
		}
		//footer
		if (!$notCloseFlag){
			$rss .= '<atom:link href="'.W_FULLPATH.'tutorialsFoldersRSS/" rel="self" type="application/rss+xml" />';
			$rss .= '</channel>';
			$rss .= '</rss>';
		}
		return $rss;
	}

	/**
	Создание rss готовых решений
	@param:
	 $items - массив с массивами содержащими следующие параметры
		#	'name': - заголовок
		#	'text': - описание
		#	'creation': дата создания
		#	'post_type': типа поста
		#	'login': логин автора
	**/
	public function getSolution($items, $notCloseFlag = false) {
		$rss = '';
		if (!$notCloseFlag)
			$rss = $this->getHeader();

		//items
		foreach($items as $item) {
		  $rss .= '<item>';
			$rss .= '<title>' . ($notCloseFlag ? 'Готовое решение »' : NULL) . $item['folder_name'] . ' »' . $item['solution_name'] . '</title>';
		  $rss .= '<description><![CDATA[' . stripslashes($item['concise_description']) . ']]></description>';
			$rss .= '<pubDate>' . date("r", strtotime($item['creation'])) . '</pubDate>';
			$link = W_FULLPATH . 'solution/' . $item['ID_solution'] . '/';
			$rss .= '<link>' . $link . '</link>';
		  $rss .= '<author>' . $item['login'] . '</author>';
			$rss .= '</item>';
		}
		//footer
		if (!$notCloseFlag){
			$rss .= '<atom:link href="'.W_FULLPATH.'solutionsFoldersRSS/" rel="self" type="application/rss+xml" />';
			$rss .= '</channel>';
			$rss .= '</rss>';
		}
		return $rss;
	}

	/**
	Создание rss уроков
	@param:
	 $items - массив с массивами содержащими следующие параметры
		#	'name': - заголовок
		#	'text': - описание
		#	'creation': дата создания
		#	'post_type': типа поста
		#	'login': логин автора
	**/
	public function getQuestion($items, $notCloseFlag = false) {
		$rss = '';
		if (!$notCloseFlag)
			$rss = $this->getHeader();

		//items
		foreach($items as $item) {
		  $rss .= '<item>';
			$rss .= '<title>' . ($notCloseFlag ? 'Вопрос »' : NULL) . $item['folder'] . ' »' . $item['name'] . '</title>';
		  $rss .= '<description><![CDATA[' . stripslashes($item['text']) . ']]></description>';
			$rss .= '<pubDate>' . date("r", strtotime($item['creation'])) . '</pubDate>';
			$link = W_FULLPATH . 'question/' . $item['ID_question'];
			$rss .= '<link>' . $link . '</link>';
		  $rss .= '<author>' . $item['login'] . '</author>';
			$rss .= '</item>';
		}
		//footer
		if (!$notCloseFlag){
			$rss .= '<atom:link href="'.W_FULLPATH.'questionsFoldersRSS/" rel="self" type="application/rss+xml" />';
			$rss .= '</channel>';
			$rss .= '</rss>';
		}
		return $rss;
	}

	/**
	 * генерируем главный rss
	 *
	 */
	public static function makeMainRss(){
		$arrArticles = Rss::getAllArticlesForRss(10);
		$arrQuestion = Rss::getQuestion(10);
		$arrSolution = Rss::getSolutions(10);
		$arrTutorial = Rss::getLessons(10);
		$objRss = new View_Rss('BitByBit.ru', W_FULLPATH);
		$rssCode = $objRss->getHeader();
		$rssCode .= $objRss->getAllArticles($arrArticles, true);
		$rssCode .= $objRss->getQuestion($arrQuestion, true);
		$rssCode .= $objRss->getSolution($arrSolution, true);
		$rssCode .= $objRss->getTutorial($arrTutorial, true);
		$rssCode .= '<atom:link href="'.W_FULLPATH.'rss/" rel="self" type="application/rss+xml" />';
		$rssCode .= '</channel>';
		$rssCode .= '</rss>';
		$fp = fopen(ABSPATH . 'content/pages/rss/mainRss.xml', 'w');
		fwrite($fp, $rssCode);
		fclose($fp);
		return true;
	}

	/**
	 * генерируем rss статей
	 *
	 */
	public static function makeMainArticleRss(){
		$arrArticles = Rss::getAllArticlesForRss(30);
		$objRss = new View_Rss('Статьи » BitByBit.ru', W_FULLPATH);
		$rssCode = $objRss->getHeader();
		$rssCode .= $objRss->getAllArticles($arrArticles, true);
		$rssCode .= '<atom:link href="'.W_FULLPATH.'articlesRss/" rel="self" type="application/rss+xml" />';
		$rssCode .= '</channel>';
		$rssCode .= '</rss>';
		$fp = fopen(ABSPATH . 'content/pages/rss/mainArticlesRss.xml', 'w');
		fwrite($fp, $rssCode);
		fclose($fp);
		return true;
	}

	/**
	 * генерируем rss вопросов
	 */
	public static function makeMainQuestionRss(){
		$arrQuestion = Rss::getQuestion(30);
		$objRss = new View_Rss('Вопросы » BitByBit.ru', W_FULLPATH);
		$rssCode = $objRss->getHeader();
		$rssCode .= $objRss->getQuestion($arrQuestion, true);
		$rssCode .= '<atom:link href="'.W_FULLPATH.'questionsRss/" rel="self" type="application/rss+xml" />';
		$rssCode .= '</channel>';
		$rssCode .= '</rss>';
		$fp = fopen(ABSPATH . 'content/pages/rss/mainQuestionsRss.xml', 'w');
		fwrite($fp, $rssCode);
		fclose($fp);
		return true;
	}

	/**
	 * генерируем rss готовых решений
	 */
	public static function makeMainSolutionsRss(){
		$arrSolution = Rss::getSolutions(30);
		$objRss = new View_Rss('Готовые решения » BitByBit.ru', W_FULLPATH);
		$rssCode = $objRss->getHeader();
		$rssCode .= $objRss->getSolution($arrSolution, true);
		$rssCode .= '<atom:link href="'.W_FULLPATH.'solutionsFoldersRSS/" rel="self" type="application/rss+xml" />';
		$rssCode .= '</channel>';
		$rssCode .= '</rss>';
		$fp = fopen(ABSPATH . 'content/pages/rss/mainSolutionsRss.xml', 'w');
		fwrite($fp, $rssCode);
		fclose($fp);
		return true;
	}

	/**
	 * генерируем rss уроков
	 */
	public static function makeMainLessonsRss(){
		$arrTutorial = Rss::getLessons(30);
		$objRss = new View_Rss('Уроки » BitByBit.ru', W_FULLPATH);
		$rssCode = $objRss->getHeader();
		$rssCode .= $objRss->getTutorial($arrTutorial, true);
		$rssCode .= '<atom:link href="'.W_FULLPATH.'tutorialsRss/" rel="self" type="application/rss+xml" />';
		$rssCode .= '</channel>';
		$rssCode .= '</rss>';
		$fp = fopen(ABSPATH . 'content/pages/rss/mainLessonsRss.xml', 'w');
		fwrite($fp, $rssCode);
		fclose($fp);
		return true;
	}
}

?>